home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newwbcontrolloop.s < prev    next >
Text File  |  1997-01-31  |  48KB  |  2,497 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'AB3:includes/titlescrnraw',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'AB3:includes/titlescrnraw1',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43.  
  44.  
  45.  
  46. ProtValA: dc.l 0
  47. ProtValB: dc.l 0
  48. ProtValC: dc.l 0
  49. ProtValD: dc.l 0
  50. ProtValE: dc.l 0
  51. ProtValF: dc.l 0
  52. ProtValG: dc.l 0
  53. ProtValH: dc.l 0
  54. ProtValI: dc.l 0
  55. ProtValJ: dc.l 0
  56. ProtValK: dc.l 0
  57. ProtValL: dc.l 0
  58. ProtValM: dc.l 0
  59. ProtValN: dc.l 0
  60.  
  61.  
  62. KVALTOASC:
  63.         Dc.b    " `  "," 1  "," 2  "," 3  "
  64.         dc.b    " 4  "," 5  "," 6  "," 7  "
  65.         dc.b    " 8  "," 9  "
  66. ; 10
  67.         Dc.b    " 0  "," -  "," +  "," \  "
  68.         dc.b     '    ','    '," Q  "," W  "
  69.         dc.b    " E  "," R  "
  70. ; 20
  71.         Dc.b    " T  "," Y  "," U  "," I  "
  72.         dc.b    " O  "," P  "," [  "," ]  "
  73.         dc.b    '    ','KP1 '
  74. ; 30
  75.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  76.         dc.b    " D  "," F  "," G  "," H  "
  77.         dc.b    " J  "," K  "
  78. ;40
  79.         Dc.b    " L  "," ;  "," #  ",'    '
  80.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  81.         dc.b    '    '," Z  "
  82. ;50
  83.         Dc.b    " X  "," C  "," V  "," B  "
  84.         dc.b    " N  "," M  "," ,  "," .  "
  85.         dc.b     " /  ",'    '
  86. ;60
  87.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  88.         dc.b    'SPC ','<-- ','TAB ','ENT '
  89.         dc.b    'RTN ','ESC '
  90. ;70
  91.         Dc.b    'DEL ','    ','    ','    '
  92.         dc.b    'KP- ','    ','UCK ','DCK '
  93.         dc.b    'RCK ','LCK '
  94. ;80
  95.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  96.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  97.         dc.b    'FK9 ','FK0 '
  98. ;90
  99.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  100.         dc.b    'KP+ ','HLP ','LSH ','RSH '
  101.         dc.b    'CPL ','CTL '
  102. ;100
  103.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  104.         dc.b    '    ','    ','    ','    '
  105.         dc.b    '    ','    '
  106.         Dc.b    '    ','    ','    ','    '
  107.         dc.b    '    ','    ','    ','    '
  108.         dc.b    '    ','    '
  109.  
  110.  even
  111.  
  112. FINISHEDLEVEL: dc.w 0
  113.  
  114.  
  115. START:
  116.  
  117.  move.b #'n',mors  
  118.  
  119. ************************************88
  120. * TAKE OUT WHEN PLAYING MODULE AGAIN
  121. ********************************
  122. ProtChkBLev1:
  123.     PRSDF
  124.     PRSDE
  125. ************************************
  126.  
  127. ; move.l #PROTCALLENC,a0
  128. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  129. ; move.l #$75055345,d0
  130. ;codeitup:
  131. ; sub.l d0,(a0)+
  132. ; ror.l #1,d0
  133. ; dbra d1,codeitup
  134. ; rts
  135.  
  136.  jsr Open256Screen
  137.  
  138. ProtChkCLev1:
  139.  PRSDA
  140.  
  141. ; move.w #$7201,titleplanes
  142.  
  143.  move.l 4.w,a6
  144.  move.l #doslibname,a1
  145.  moveq #0,d0
  146.  jsr -552(a6)
  147.  move.l d0,doslib
  148.  
  149.  move.l doslib,a6
  150.  move.l #LINKname,d1
  151.  move.l #1005,d2
  152.  jsr -30(a6)
  153.  move.l d0,LLhandle
  154.  
  155.  move.l doslib,a6
  156.  move.l d0,d1
  157.  move.l #LINKSPACE,d2
  158.  move.l #90000,d3
  159.  jsr -42(a6)
  160.  
  161.  move.l doslib,a6
  162.  move.l LLhandle,d1
  163.  jsr -36(a6)
  164.  
  165.  
  166.  PRSDS
  167. ; jsr stuff
  168.  
  169.  jsr _InitLowLevel
  170.  
  171. ; jsr CLEARTITLEPAL
  172.  
  173. ProtChkDLev1:
  174.  PRSDT
  175.  
  176. ; move.w #$20,$dff1dc
  177. ; move.l #titlecop,$dff080
  178.  PRSDV
  179. ; move.w #$87c0,$dff000+dmacon
  180. ; move.w #$8020,$dff000+dmacon
  181. ProtChkMLev1:
  182.  move.w $dff006,d0
  183.  lea RVAL2-100(pc),a0
  184.  add.w d0,100(a0)
  185.  
  186.  bsr GETTITLEMEM
  187. ProtChkELev1:
  188.  PRSDU
  189. ; bsr CLROPTSCRN
  190.  
  191. ; bsr SETUPTITLESCRN
  192.  
  193. ; jsr _InitPlayer
  194.  
  195. ; move.l #INTROTUNENAME,a0
  196. ; jsr _LoadModule
  197. ; move.l d0,INTROTUNEADDR
  198.  PRSDY
  199. ; move.l d0,a0
  200. ; jsr _InitModule
  201.  
  202. ; move.l INTROTUNEADDR,a0
  203. ; jsr _PlayModule
  204. ProtChkFLev1:
  205.  PRSDa
  206.  bsr LOADTITLESCRN2
  207.  
  208.  FLASHER $0f0,$fff
  209.  
  210.  move.w #0,FADEVAL
  211.  move.w #63,FADEAMOUNT
  212.  bsr FADEUPTITLE
  213.  PRSDB
  214.  jsr LOADWALLS
  215.  jsr LOADFLOOR
  216.  jsr LOADOBS
  217.  PRSDZ
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  move.w #31,FADEAMOUNT
  224.  PRSDC
  225.  bsr FADEDOWNTITLE 
  226.  
  227. ; IFEQ CD32VER 
  228. ; bsr ASKFORDISK
  229. ; ENDC
  230. ; IFNE CD32VER
  231.  PRSDD
  232. ; ENDC
  233.  
  234.  jsr LOAD_SFX
  235. ; jsr _StopPlayer
  236.  PRSDW
  237.  PRSDX
  238. ; jsr _RemPlayer
  239.  
  240.  
  241.  IFNE CD32VER
  242.  move.l doslib,a6
  243.  move.l #115,d1
  244.  jsr -198(a6)
  245.  ENDC
  246.  
  247. ; move.l #newblag,$80
  248. ; trap #0
  249. ; bra JUMPPASTIT
  250. ; rts
  251. ;
  252. ;newblag:
  253.  
  254.  
  255. ProtChkGLev1:
  256. ; bsr PROTSETUP
  257.  bsr DEFAULTGAME
  258.  
  259. ; move.l INTROTUNEADDR,a0
  260. ; jsr _UnLoadModule
  261.  
  262. ; IFEQ CD32VER
  263. ; jsr KInt_Init
  264. ; ENDC
  265. ProtChkHLev1:
  266. ; rte
  267. ;
  268. ;JUMPPASTIT:
  269.  
  270. BACKTOMENU:
  271.  
  272.  jsr CLEARKEYBOARD
  273.  
  274. ; cmp.b #'s',mors
  275. ; beq.s BACKTOSLAVE
  276. ; cmp.b #'m',mors
  277. ; beq.s BACKTOMASTER
  278. ; bsr READMAINMENU
  279. ; bra DONEMENU
  280. ;BACKTOMASTER:
  281. ; bsr MASTERMENU
  282. ; bra DONEMENU
  283. ;BACKTOSLAVE:
  284. ; bsr SLAVEMENU
  285. ;DONEMENU:
  286.  
  287.  
  288.  bsr WAITREL
  289.  
  290. ; IFEQ CD32VER
  291. ; move.l OLDKINT,$68.w
  292. ; ENDC
  293.  
  294.  bsr CLRSPRITES
  295.  
  296.  move.w #31,FADEAMOUNT
  297.  bsr FADEUPTITLE
  298.  move.w #63,FADEAMOUNT
  299.  bsr FADEDOWNTITLE
  300.  
  301.  move.w #$0201,titleplanes
  302.  
  303.     FILTER
  304.     
  305.  tst.b SHOULDQUIT
  306.  bne QUITTT
  307.  
  308.  bsr RELEASETITLEMEM
  309.  
  310.   
  311.  jsr LOADBOTPIC
  312.  
  313.   
  314.  clr.b FINISHEDLEVEL
  315.  
  316.  move.w #0,PLR1s_angpos
  317.  move.w #0,PLR2s_angpos
  318.  move.w #0,PLR1_angpos
  319.  move.w #0,PLR2_angpos
  320.  move.b #0,PLR1_GunSelected
  321.  move.b #0,PLR2_GunSelected
  322.  
  323. **************************8
  324.  clr.b NASTY
  325. *************************** 
  326.  
  327.  
  328.     jsr PLAYTHEGAME
  329.  
  330.  bsr FREEBOTMEM 
  331.  
  332. ; bra QUITTT
  333.  
  334.  tst.b FINISHEDLEVEL
  335.  beq dontusestats
  336.  bsr CALCPASSWORD
  337. dontusestats:
  338.  bsr PASSLINETOGAME
  339.  bsr GETSTATS
  340.  
  341.  bsr GETTITLEMEM
  342. ; bsr CLROPTSCRN
  343. ; bsr SETUPTITLESCRN
  344.  
  345. ; bsr LOADTITLESCRN2
  346. ; move.w #$7201,titleplanes
  347.  
  348. ; move.w #$20,$dff1dc
  349. ; move.l #titlecop,$dff080
  350. ; move.w #$87c0,$dff000+dmacon
  351. ; move.w #$8020,$dff000+dmacon 
  352.  
  353.  move.w #0,FADEVAL
  354.  move.w #63,FADEAMOUNT
  355.  bsr FADEUPTITLE
  356.  
  357.  move.w #31,FADEAMOUNT
  358.  bsr FADEDOWNTITLE 
  359.  
  360. ; IFEQ CD32VER
  361. ; jsr KInt_Init
  362. ; ENDC
  363.  
  364.  bra BACKTOMENU
  365.  
  366. QUITTT:
  367.  
  368.  move.l LEVELDATA,d1
  369.  move.l d1,a1
  370.  move.l #120000,d0
  371.  move.l 4.w,a6
  372.  jsr -210(a6)
  373.  
  374.  move.l TEXTSCRN,d1
  375.  move.l d1,a1
  376.  move.l #10240*2,d0
  377.  move.l 4.w,a6
  378.  jsr -210(a6)
  379.  
  380.  move.l FASTBUFFER,d1    
  381.  move.l #2*320*256,d0
  382.  move.l 4.w,a6
  383.  jsr -210(a6)
  384.  
  385.  jsr RELEASEWALLMEM
  386.  jsr RELEASESAMPMEM
  387.  jsr RELEASEFLOORMEM
  388.  jsr RELEASEOBJMEM
  389.   
  390.  move.l old,$dff080
  391.  move.l 4.w,a6
  392.  lea VBLANKInt,a1
  393.  moveq #INTB_COPER,d0
  394.  jsr _LVORemIntServer(a6)
  395.  
  396.  move.l 4.w,a6
  397.  lea KEYInt,a1
  398.  moveq #INTB_PORTS,d0
  399.  jsr _LVORemIntServer(a6)
  400.  
  401.  move.w #$f8e,$dff1dc
  402.  
  403.  move.l old,$dff080
  404.  move.w _storeint,d0
  405.  or.w d0,$dff000+intena
  406.  
  407. ; move.l    4.w,a6
  408. ; jsr    _LVOPermit(a6)
  409.  
  410.  
  411.  move.l #0,d0
  412.  
  413.  rts
  414.  
  415. SSTACK: dc.l 0
  416.  
  417. ; KEY OPTIONS:
  418. CONTROLBUFFER:
  419. turn_left_key:
  420.  dc.b $4f
  421. turn_right_key:
  422.  dc.b $4e
  423. forward_key:
  424.  dc.b $4c
  425. backward_key:
  426.  dc.b $4d
  427. fire_key:
  428.  dc.b $65
  429. operate_key:
  430.  dc.b $40
  431. run_key:
  432.  dc.b $61
  433. force_sidestep_key:
  434.  dc.b $67
  435. sidestep_left_key:
  436.  dc.b $39
  437. sidestep_right_key:
  438.  dc.b $3a
  439. duck_key:
  440.  dc.b $22
  441. look_behind_key:
  442.  dc.b $28
  443.  
  444. templeftkey: dc.b 0
  445. temprightkey: dc.b 0
  446. tempslkey: dc.b 0 
  447. tempsrkey: dc.b 0
  448.  
  449.  even 
  450.  
  451. GETSTATS:
  452. ; CHANGE PASSWORD INTO RAW DATA
  453.  
  454.  move.b PASSBUFFER,d0
  455.  and.w #$7f,d0
  456.  move.w d0,PLR1_energy
  457.  move.b PASSBUFFER+1,d0
  458.  btst #7,d0
  459.  sne PLR1_GunData+32+7
  460.  btst #6,d0
  461.  sne PLR1_GunData+32*2+7
  462.  btst #5,d0
  463.  sne PLR1_GunData+32*4+7
  464.  btst #4,d0
  465.  sne PLR1_GunData+32*7+7
  466.  and.w #%1111,d0
  467.  move.w d0,MAXLEVEL
  468.  move.b PASSBUFFER+2,d0
  469.  and.w #$7f,d0
  470.  lsl.w #3,d0
  471.  move.w d0,PLR1_GunData
  472.  move.b PASSBUFFER+3,d0
  473.  and.w #$7f,d0
  474.  lsl.w #3,d0
  475.  move.w d0,PLR1_GunData+32
  476.  move.b PASSBUFFER+4,d0
  477.  and.w #$7f,d0
  478.  lsl.w #3,d0
  479.  move.w d0,PLR1_GunData+32*2
  480.  move.b PASSBUFFER+5,d0
  481.  and.w #$7f,d0
  482.  lsl.w #3,d0
  483.  move.w d0,PLR1_GunData+32*4
  484.  move.b PASSBUFFER+6,d0
  485.  and.w #$7f,d0
  486.  lsl.w #3,d0
  487.  move.w d0,PLR1_GunData+32*7
  488.  rts
  489.  
  490.  
  491. SETPLAYERS:
  492.  
  493.  move.w PLOPT,d0
  494.  add.b #'a',d0
  495.  move.b d0,LEVA
  496.  move.b d0,LEVB
  497.  move.b d0,LEVC
  498.  move.b d0,LEVD
  499.  
  500.  cmp.b #'s',mors
  501.  beq SLAVESETUP
  502.  cmp.b #'m',mors
  503.  beq MASTERSETUP
  504.  st NASTY
  505. onepla:
  506.  rts
  507.  
  508. NASTY: dc.w 0
  509.  
  510. MASTERSETUP:
  511.  bsr TWOPLAYER
  512.  clr.b NASTY
  513.  move.w PLOPT,d0
  514.  jsr SENDFIRST
  515.  rts
  516.  
  517. SLAVESETUP:
  518.  bsr TWOPLAYER
  519.  CLR.B NASTY
  520.  jsr RECFIRST
  521.  move.w d0,PLOPT
  522.  add.b #'a',d0
  523.  move.b d0,LEVA
  524.  move.b d0,LEVB
  525.  move.b d0,LEVC
  526.  rts
  527.      
  528. ********************************************************
  529.  
  530. ASKFORDISK:
  531.  lea RVAL1+300(pc),a0
  532.  lea RVAL2+900(pc),a1
  533.  PRSDD
  534.  move.w #3,OptScrn
  535.  bsr DRAWOPTSCRN
  536.  
  537. ProtChkNLev1:
  538. .wtrel:
  539.  btst #7,$bfe001
  540.  beq.s .wtrel
  541.  
  542. wtclick:
  543.  add.w #$235,-300(a0)
  544.  add.w #$4533,-900(a0)
  545.  btst #6,$bfe001
  546.  bne.s wtclick
  547.  
  548.  rts
  549.  
  550. CLRSPRITES: 
  551.  move.l #nullspr,d0
  552.  move.w d0,tsp0l
  553.  move.w d0,tsp1l
  554.  move.w d0,tsp2l
  555.  move.w d0,tsp3l
  556.  move.w d0,tsp4l
  557.  move.w d0,tsp5l
  558.  move.w d0,tsp6l
  559.  move.w d0,tsp7l
  560.  swap d0
  561.  move.w d0,tsp0h
  562.  move.w d0,tsp1h
  563.  move.w d0,tsp2h
  564.  move.w d0,tsp3h
  565.  move.w d0,tsp4h
  566.  move.w d0,tsp5h
  567.  move.w d0,tsp6h
  568.  move.w d0,tsp7h 
  569.  rts
  570.  
  571. ********************************************************
  572.  
  573. READMAINMENU:
  574.  
  575.  
  576.  move.b #'n',mors
  577.  
  578.  move.w MAXLEVEL,d0
  579.  
  580.  move.l #CURRENTLEVELLINE,a1
  581.  muls #40,d0
  582.  move.l #LEVEL_OPTS,a0
  583.  add.l d0,a0
  584.  bsr PUTINLINE
  585.  
  586.  
  587.  
  588. ; Stay here until 'play game' is selected.
  589.  
  590.  move.w #0,OptScrn
  591.  bsr DRAWOPTSCRN
  592.  move.w #1,OPTNUM
  593.  
  594.  bsr HIGHLIGHT
  595.  
  596.  
  597.  
  598.  bsr WAITREL
  599. .rdlop:
  600.  
  601.  bsr CHECKMENU
  602.  tst.w d0
  603.  blt.s .rdlop
  604.  
  605. ; bne .noopt
  606. ; bra MASTERMENU
  607. ;.noopt:
  608.  
  609. ; cmp.w #5,d0
  610. ; bne.s .noqui
  611. ; st SHOULDQUIT
  612. ; bra playgame
  613. ;.noqui
  614.  
  615.  cmp.w #1,d0
  616.  beq playgame
  617.  
  618.  cmp.w #2,d0
  619.  bne .nocontrol
  620.  
  621.  bsr CHANGECONTROLS
  622.  
  623.  move.w #0,OptScrn
  624.  bsr DRAWOPTSCRN
  625.  move.w #0,OPTNUM
  626.  
  627.  bsr HIGHLIGHT
  628.  
  629.  bsr WAITREL
  630.  bra .rdlop
  631.  
  632. .nocontrol:
  633.  
  634. ; cmp.w #3,d0
  635. ; bne .nocred
  636. ; bsr SHOWCREDITS
  637. ; move.w #0,OptScrn
  638. ; bsr DRAWOPTSCRN
  639. ; move.w #1,OPTNUM
  640. ;
  641. ; bsr HIGHLIGHT
  642. ;
  643. ; bsr WAITREL
  644. ; bra .rdlop
  645.  
  646.  
  647. ;.nocred:
  648.  
  649. ; cmp.w #4,d0
  650. ; bne playgame
  651. ; bsr WAITREL
  652. ;
  653. ; move.l #PASSWORDLINE+12,a0
  654. ; moveq #15,d2
  655. ;.clrline:
  656. ; move.b #32,(a0)+
  657. ; dbra d2,.clrline 
  658. ; move.w #0,OptScrn
  659. ; bsr DRAWOPTSCRN
  660. ;
  661. ; IFEQ CD32VER
  662. ; clr.b lastpressed
  663. ; move.l #PASSWORDLINE+12,a0
  664. ; move.w #0,d1
  665. ;.ENTERPASS:
  666. ; tst.b lastpressed
  667. ; beq .ENTERPASS
  668. ; move.b lastpressed,d2
  669. ; move.b #0,lastpressed
  670. ; move.l #KVALTOASC,a1
  671. ; cmp.l #'<-- ',(a1,d2.w*4)
  672. ; bne .nodel
  673. ;
  674. ; tst.b d1
  675. ; beq .nodel
  676. ;
  677. ; subq #1,d1
  678. ; move.b #32,-(a0)
  679. ; movem.l d0-d7/a0-a6,-(a7)
  680. ; bsr JUSTDRAWIT
  681. ; movem.l (a7)+,d0-d7/a0-a6
  682. ; bra .ENTERPASS
  683. ;
  684. ;.nodel:
  685. ; cmp.l #'RTN ',(a1,d2.w*4)
  686. ; beq .FORGETIT
  687. ; cmp.l #'ESC ',(a1,d2.w*4)
  688. ; beq .FORGETIT
  689. ; move.b 1(a1,d2.w*4),d2
  690. ; cmp.b #65,d2
  691. ; blt .ENTERPASS
  692. ; cmp.b #'Z',d2
  693. ; bgt .ENTERPASS
  694. ; move.b d2,(a0)+
  695. ; move.w #0,OptScrn
  696. ; movem.l d0-d7/a0-a6,-(a7)
  697. ; bsr JUSTDRAWIT
  698. ; movem.l (a7)+,d0-d7/a0-a6
  699. ; add.w #1,d1
  700. ; cmp.w #16,d1
  701. ; blt .ENTERPASS
  702. ;
  703. ; ENDC
  704. ; IFNE CD32VER
  705. ; move.l #PASSWORDLINE+12,a0
  706. ; move.w #15,d0
  707. ;.ENTERPASS:
  708. ; bsr GETACHAR
  709. ; dbra d0,.ENTERPASS
  710. ; ENDC
  711. ;
  712. ; bsr PASSLINETOGAME
  713. ; tst.w d0
  714. ; bne .FORGETIT
  715. ; bsr GETSTATS
  716. ; move.w MAXLEVEL,d0
  717. ; move.l #CURRENTLEVELLINE,a1
  718. ; muls #40,d0
  719. ; move.l #LEVEL_OPTS,a0
  720. ; add.l d0,a0
  721. ; bsr PUTINLINE
  722. ;
  723. ;.FORGETIT:
  724. ; bsr WAITREL
  725. ; bsr CALCPASSWORD
  726. ;
  727. ; move.w #0,OptScrn
  728. ; bsr DRAWOPTSCRN
  729. ;
  730. ; move.w #1,OPTNUM
  731. ;
  732. ; bsr HIGHLIGHT
  733. ;
  734. ; bra .rdlop 
  735.  
  736. playgame:
  737.  move.w MAXLEVEL,PLOPT
  738.  rts
  739.  
  740. SHOULDQUIT: dc.w 0
  741.  
  742. LEVELSELECTED:
  743.  dc.w 0
  744.  
  745.  IFNE CD32VER
  746. GETACHAR:
  747.  moveq #0,d7
  748.  move.b #'A',(a0)
  749.  movem.l d0-d7/a0-a6,-(a7)
  750.  jsr JUSTDRAWIT
  751.  movem.l (a7)+,d0-d7/a0-a6
  752.  
  753. .wtnum:
  754.  btst #1,$dff00c
  755.  sne d1
  756.  btst #1,$dff00d
  757.  sne d2
  758.  btst #0,$dff00c
  759.  sne d3
  760.  btst #0,$dff00d
  761.  sne d4
  762.  
  763.  eor.b d1,d3
  764.  eor.b d2,d4
  765.  
  766.  tst.b d1
  767.  beq.s .NODELETE
  768.  cmp.w #15,d0
  769.  beq.s .NODELETE
  770.  move.b #32,(a0)
  771.  subq #1,a0
  772.  addq #1,d0
  773.  move.b (a0),d7
  774.  sub.b #'A',d7
  775.  movem.l d0-d7/a0-a6,-(a7)
  776.  jsr JUSTDRAWIT
  777.  movem.l (a7)+,d0-d7/a0-a6
  778.  jsr WAITFORNOPRESS
  779.  bra .wtnum
  780. .NODELETE
  781.  
  782.  tst.b d4
  783.  bne.s .PREVNUM
  784.  tst.b d3
  785.  bne.s .NEXTNUM
  786.  btst #7,$bfe001
  787.  bne.s .wtnum
  788.  addq #1,a0
  789.  jsr WAITFORNOPRESS
  790.  rts
  791.  
  792. .PREVNUM:
  793.  subq #1,d7
  794.  bge.s .nonegg
  795.  moveq #15,d7
  796. .nonegg:
  797.  move.b d7,d1
  798.  add.b #'A',d1
  799.  move.b d1,(a0)
  800.  movem.l d0-d7/a0-a6,-(a7)
  801.  jsr JUSTDRAWIT
  802.  movem.l (a7)+,d0-d7/a0-a6
  803.  
  804.  jsr WAITFORNOPRESS
  805.  
  806.  bra .wtnum
  807.  
  808. .NEXTNUM:
  809.  addq #1,d7
  810.  cmp.w #15,d7
  811.  ble.s .nobigg
  812.  moveq #0,d7
  813. .nobigg:
  814.  move.b d7,d1
  815.  add.b #'A',d1
  816.  move.b d1,(a0)
  817.  movem.l d0-d7/a0-a6,-(a7)
  818.  jsr JUSTDRAWIT
  819.  movem.l (a7)+,d0-d7/a0-a6
  820.  jsr WAITFORNOPRESS
  821.  bra .wtnum
  822.  rts
  823.  ENDC
  824.  
  825.  
  826. MASTERMENU:
  827.  
  828.  move.b #'m',mors
  829.  
  830.  move.w #0,LEVELSELECTED
  831.  
  832.  move.w #0,d0 
  833.  move.l #CURRENTLEVELLINEM,a1
  834.  muls #40,d0
  835.  move.l #LEVEL_OPTS,a0
  836.  add.l d0,a0
  837.  bsr PUTINLINE
  838.  
  839. ; Stay here until 'play game' is selected.
  840.  
  841.  move.w #4,OptScrn
  842.  bsr DRAWOPTSCRN
  843.  move.w #1,OPTNUM
  844.  
  845.  bsr HIGHLIGHT
  846.  
  847.  bsr WAITREL
  848. .rdlop:
  849.  bsr CHECKMENU
  850.  tst.w d0
  851.  blt.s .rdlop
  852.  bsr WAITREL
  853.  
  854.  cmp.w #1,d0
  855.  bne.s .nonextlev
  856.  
  857.  move.w LEVELSELECTED,d0
  858.  add.w #1,d0
  859.  cmp.w MAXLEVEL,d0
  860.  blt .nowrap
  861.  moveq #0,d0
  862. .nowrap:
  863.  move.w d0,LEVELSELECTED
  864.  move.l #CURRENTLEVELLINEM,a1
  865.  muls #40,d0
  866.  move.l #LEVEL_OPTS,a0
  867.  add.l d0,a0
  868.  bsr PUTINLINE
  869.  bsr JUSTDRAWIT
  870.  bra .rdlop
  871.  
  872. .nonextlev:
  873.  cmp.w #2,d0
  874.  beq .playgame
  875.  
  876.  cmp.w #0,d0
  877.  bne .noopt
  878.  
  879.  bra SLAVEMENU
  880.  
  881. .noopt:
  882.  
  883.  cmp.w #3,d0
  884.  bne .nocontrol
  885.  
  886.  bsr CHANGECONTROLS
  887.  
  888.  move.w #4,OptScrn
  889.  bsr DRAWOPTSCRN
  890.  move.w #0,OPTNUM
  891.  
  892.  bsr HIGHLIGHT
  893.  
  894.  bsr WAITREL
  895.  bra .rdlop
  896.  
  897. .nocontrol:
  898.  
  899. .playgame
  900.  
  901.  move.w LEVELSELECTED,PLOPT
  902.  rts
  903.  
  904. SLAVEMENU:
  905.  
  906.  move.b #'s',mors
  907.  
  908. ; Stay here until 'play game' is selected.
  909.  
  910.  move.w #5,OptScrn
  911.  bsr DRAWOPTSCRN
  912.  move.w #1,OPTNUM
  913.  
  914.  bsr HIGHLIGHT
  915.  
  916.  bsr WAITREL
  917. .rdlop:
  918.  bsr CHECKMENU
  919.  tst.w d0
  920.  blt.s .rdlop
  921.  bsr WAITREL
  922.  
  923.  cmp.w #1,d0
  924.  beq .playgame
  925.  
  926.  cmp.w #0,d0
  927.  bne .noopt
  928.  
  929.  bra READMAINMENU
  930.  
  931. .noopt:
  932.  
  933.  cmp.w #2,d0
  934.  bne .nocontrol
  935.  
  936.  bsr CHANGECONTROLS
  937.  
  938.  move.w #0,OptScrn
  939.  bsr DRAWOPTSCRN
  940.  move.w #0,OPTNUM
  941.  
  942.  bsr HIGHLIGHT
  943.  
  944.  bsr WAITREL
  945.  bra .rdlop
  946.  
  947. .nocontrol:
  948. .playgame:
  949.  
  950.  rts
  951.  
  952. TWOPLAYER:
  953.  move.w #0,OldEnergy
  954.  move.w #127,Energy
  955.  jsr EnergyBar
  956.  
  957.  move.w #63,OldAmmo
  958.  move.w #0,Ammo
  959.  jsr AmmoBar
  960.  move.w #0,OldAmmo
  961.  
  962.  move.w #127,PLR1_energy
  963.  move.w #127,PLR2_energy 
  964.  move.w #160,PLR1_GunData    ; 10 shots pistol
  965.  st PLR1_GunData+7
  966.  
  967.  st.b PLR1_GunData+32+7
  968.  move.w #80*4,PLR1_GunData+32
  969.  
  970.  st.b PLR1_GunData+64+7
  971.  move.w #80*4,PLR1_GunData+64
  972.  
  973.  st.b PLR1_GunData+32*3+7
  974.  move.w #80*4,PLR1_GunData+32*3
  975.  
  976.  st.b PLR1_GunData+32*4+7
  977.  move.w #80*4,PLR1_GunData+32*4
  978.  
  979.  st.b PLR1_GunData+32*7+7
  980.  move.w #80*4,PLR1_GunData+32*7
  981.  
  982.  move.b #0,PLR1_GunSelected
  983.  
  984.  move.w #160,PLR2_GunData    ; 10 shots pistol
  985.  st PLR2_GunData+7
  986.  st.b PLR2_GunData+32+7
  987.  move.w #80*4,PLR2_GunData+32
  988.  
  989.  st.b PLR2_GunData+64+7
  990.  move.w #80*4,PLR2_GunData+64
  991.  
  992.  st.b PLR2_GunData+32*3+7
  993.  move.w #80*4,PLR2_GunData+32*3
  994.  
  995.  st.b PLR2_GunData+32*4+7
  996.  move.w #80*4,PLR2_GunData+32*4
  997.  
  998.  st.b PLR2_GunData+32*7+7
  999.  move.w #80*4,PLR2_GunData+32*7
  1000.  move.b #0,PLR2_GunSelected
  1001.  rts
  1002.  
  1003. newdum:
  1004.  rts
  1005.  
  1006. DEFAULTGAME:
  1007.  move.w #0,MAXLEVEL
  1008.  move.w #5,CHEATNUM
  1009.  move.l #CHEATFRAME-200000,CHEATPTR
  1010.  
  1011.  move.w #0,OldEnergy
  1012.  move.w #127,Energy
  1013.  jsr EnergyBar
  1014.  
  1015.  move.w #63,OldAmmo
  1016.  move.w #0,Ammo
  1017.  jsr AmmoBar
  1018.  move.w #0,OldAmmo
  1019.  
  1020.  move.w #127,PLR1_energy
  1021.  move.w #127,PLR2_energy 
  1022.  move.w #160,PLR1_GunData    ; 10 shots pistol
  1023.  st PLR1_GunData+7
  1024.  clr.b PLR1_GunData+32+7
  1025.  clr.w PLR1_GunData+32
  1026.  clr.b PLR1_GunData+64+7
  1027.  clr.w PLR1_GunData+64
  1028.  clr.b PLR1_GunData+32*3+7
  1029.  clr.w PLR1_GunData+32*3
  1030.  clr.b PLR1_GunData+32*4+7
  1031.  clr.w PLR1_GunData+32*4
  1032.  clr.b PLR1_GunData+32*7+7
  1033.  clr.w PLR1_GunData+32*7
  1034.  move.b #0,PLR1_GunSelected
  1035.  
  1036. ProtChkILev1:
  1037. ************************************************
  1038. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  1039. ************************************************
  1040.  
  1041.  
  1042. ************************************************
  1043.  
  1044.  move.w #160,PLR2_GunData    ; 10 shots pistol
  1045.  st PLR2_GunData+7
  1046.  clr.b PLR2_GunData+32+7
  1047.  clr.w PLR2_GunData+32
  1048.  clr.b PLR2_GunData+64+7
  1049.  clr.w PLR2_GunData+64
  1050.  clr.b PLR2_GunData+32*3+7
  1051.  clr.w PLR2_GunData+32*3
  1052.  clr.b PLR2_GunData+32*4+7
  1053.  clr.w PLR2_GunData+32*4
  1054.  clr.b PLR2_GunData+32*7+7
  1055.  clr.w PLR2_GunData+32*7
  1056.  move.b #0,PLR2_GunSelected
  1057.  
  1058.  bsr CALCPASSWORD
  1059.  
  1060.  rts
  1061.  
  1062. CHKPROT: dc.w 0
  1063.  
  1064. GETPARITY:
  1065.  move.w #6,d3
  1066. .calcparity:
  1067.  btst d3,d0
  1068.  beq.s .nochange
  1069.  bchg #7,d0
  1070. .nochange:
  1071.  dbra d3,.calcparity
  1072.  rts
  1073.  
  1074. CHECKPARITY:
  1075.  move.w #6,d3
  1076.  move.b #$0,d2
  1077. .calcparity:
  1078.  btst d3,d0
  1079.  beq.s .nochange
  1080.  bchg #7,d2
  1081. .nochange:
  1082.  dbra d3,.calcparity
  1083.  move.b d0,d1
  1084.  and.b #$80,d1
  1085.  eor.b d1,d2
  1086.  sne.s d5
  1087.  rts
  1088.  
  1089. CALCPASSWORD:
  1090.  move.b PLR1_energy+1,d0
  1091.  bsr GETPARITY
  1092.  move.b d0,PASSBUFFER
  1093.  moveq #0,d0
  1094.  tst.b PLR1_GunData+32+7
  1095.  sne d0
  1096.  lsl.w #1,d0
  1097.  tst.b PLR1_GunData+64+7
  1098.  sne d0
  1099.  lsl.w #1,d0
  1100.  tst.b PLR1_GunData+32*4+7
  1101.  sne d0
  1102.  lsl.w #1,d0
  1103.  tst.b PLR1_GunData+32*7+7
  1104.  sne d0
  1105.  lsr.w #3,d0
  1106.  and.b #%11110000,d0
  1107.  or.b MAXLEVEL+1,d0
  1108.  move.b d0,PASSBUFFER+1
  1109.  eor.b #%10110101,d0
  1110.  neg.b d0
  1111.  add.b #50,d0
  1112.  move.b d0,PASSBUFFER+7
  1113.  
  1114.  move.w PLR1_GunData,d0
  1115.  lsr.w #3,d0
  1116.  bsr GETPARITY
  1117.  move.b d0,PASSBUFFER+2
  1118.  move.w PLR1_GunData+32,d0
  1119.  lsr.w #3,d0
  1120.  bsr GETPARITY
  1121.  move.b d0,PASSBUFFER+3
  1122.  move.w PLR1_GunData+32*2,d0
  1123.  lsr.w #3,d0
  1124.  bsr GETPARITY
  1125.  move.b d0,PASSBUFFER+4
  1126.  move.w PLR1_GunData+32*4,d0
  1127.  lsr.w #3,d0
  1128.  bsr GETPARITY
  1129.  move.b d0,PASSBUFFER+5
  1130.  move.w PLR1_GunData+32*7,d0
  1131.  lsr.w #3,d0
  1132.  bsr GETPARITY
  1133.  move.b d0,PASSBUFFER+6
  1134.  
  1135.  move.w #3,d0
  1136.  move.l #PASSBUFFER,a0
  1137.  move.l #PASSBUFFER+8,a1
  1138.  move.l #PASS,a2
  1139.  moveq #0,d4
  1140. mixemup:
  1141.  move.b (a0)+,d1
  1142.  move.b -(a1),d2
  1143.  not.b d2
  1144.  moveq #0,d3
  1145.  lsr.b #1,d1
  1146.  addx.w d3,d3
  1147.  lsr.b #1,d2
  1148.  addx.w d3,d3
  1149.  lsr.b #1,d1
  1150.  addx.w d3,d3
  1151.  lsr.b #1,d2
  1152.  addx.w d3,d3
  1153.  lsr.b #1,d1
  1154.  addx.w d3,d3
  1155.  lsr.b #1,d2
  1156.  addx.w d3,d3
  1157.  lsr.b #1,d1
  1158.  addx.w d3,d3
  1159.  lsr.b #1,d2
  1160.  addx.w d3,d3
  1161.  lsr.b #1,d1
  1162.  addx.w d3,d3
  1163.  lsr.b #1,d2
  1164.  addx.w d3,d3
  1165.  lsr.b #1,d1
  1166.  addx.w d3,d3
  1167.  lsr.b #1,d2
  1168.  addx.w d3,d3
  1169.  lsr.b #1,d1
  1170.  addx.w d3,d3
  1171.  lsr.b #1,d2
  1172.  addx.w d3,d3
  1173.  lsr.b #1,d1
  1174.  addx.w d3,d3
  1175.  lsr.b #1,d2
  1176.  addx.w d3,d3
  1177.  move.w d3,(a2)+
  1178.  
  1179.  dbra d0,mixemup
  1180.  
  1181.  move.l #PASSWORDLINE+12,a0
  1182.  move.l #PASS,a1
  1183.  move.w #7,d0
  1184. putinpassline:
  1185.  move.b (a1),d1
  1186.  and.b #%1111,d1
  1187.  add.b #65,d1
  1188.  move.b d1,(a0)+
  1189.  move.b (a1)+,d1
  1190.  lsr.b #4,d1
  1191.  and.b #%1111,d1
  1192.  add.b #65,d1
  1193.  move.b d1,(a0)+
  1194.  dbra d0,putinpassline
  1195.  rts
  1196.  
  1197. PASSLINETOGAME:
  1198.  move.l #PASSWORDLINE+12,a0
  1199.  move.l #PASS,a1
  1200.  move.w #7,d0
  1201. getbuff:
  1202.  move.b (a0)+,d1
  1203.  move.b (a0)+,d2
  1204.  sub.b #65,d1
  1205.  sub.b #65,d2
  1206.  and.b #%1111,d1
  1207.  and.b #%1111,d2
  1208.  lsl.b #4,d2
  1209.  or.b d2,d1
  1210.  move.b d1,(a1)+
  1211.  dbra d0,getbuff
  1212.  
  1213.  move.l #PASS,a0
  1214.  move.l #PASSBUFFER,a1
  1215.  move.l #PASSBUFFER+8,a2
  1216.  move.w #3,d0
  1217.  moveq #0,d4
  1218. unmix:
  1219.  move.w (a0)+,d1
  1220.  moveq #0,d2
  1221.  moveq #0,d3
  1222.  lsr.w #1,d1
  1223.  addx.w d3,d3
  1224.  lsr.w #1,d1
  1225.  addx.w d2,d2
  1226.  lsr.w #1,d1
  1227.  addx.w d3,d3
  1228.  lsr.w #1,d1
  1229.  addx.w d2,d2
  1230.  lsr.w #1,d1
  1231.  addx.w d3,d3
  1232.  lsr.w #1,d1
  1233.  addx.w d2,d2
  1234.  lsr.w #1,d1
  1235.  addx.w d3,d3
  1236.  lsr.w #1,d1
  1237.  addx.w d2,d2
  1238.  lsr.w #1,d1
  1239.  addx.w d3,d3
  1240.  lsr.w #1,d1
  1241.  addx.w d2,d2
  1242.  lsr.w #1,d1
  1243.  addx.w d3,d3
  1244.  lsr.w #1,d1
  1245.  addx.w d2,d2
  1246.  lsr.w #1,d1
  1247.  addx.w d3,d3
  1248.  lsr.w #1,d1
  1249.  addx.w d2,d2
  1250.  lsr.w #1,d1
  1251.  addx.w d3,d3
  1252.  lsr.w #1,d1
  1253.  addx.w d2,d2
  1254.  not.b d3
  1255.  move.b d3,-(a2)
  1256.  move.b d2,(a1)+
  1257.  dbra d0,unmix
  1258.  
  1259.  move.b PASSBUFFER,d0
  1260.  bsr CHECKPARITY
  1261.  tst.b d5
  1262.  bne illega
  1263.  move.b PASSBUFFER+2,d0
  1264.  bsr CHECKPARITY
  1265.  tst.b d5
  1266.  bne illega
  1267.  move.b PASSBUFFER+3,d0
  1268.  bsr CHECKPARITY
  1269.  tst.b d5
  1270.  bne illega
  1271.  move.b PASSBUFFER+4,d0
  1272.  bsr CHECKPARITY
  1273.  tst.b d5
  1274.  bne illega
  1275.  move.b PASSBUFFER+5,d0
  1276.  bsr CHECKPARITY
  1277.  tst.b d5
  1278.  bne illega
  1279.  move.b PASSBUFFER+6,d0
  1280.  bsr CHECKPARITY
  1281.  tst.b d5
  1282.  bne illega
  1283.  
  1284.  move.b PASSBUFFER+1,d0
  1285.  eor.b #%10110101,d0
  1286.  neg.b d0
  1287.  add.b #50,d0
  1288.  cmp.b PASSBUFFER+7,d0
  1289.  bne illega
  1290.  
  1291.  move.w #0,d0
  1292.  rts
  1293.  
  1294. illega:
  1295.  
  1296.  move.w #-1,d0
  1297.  
  1298.  rts
  1299.  
  1300. PASSBUFFER:
  1301.  ds.b 8
  1302.  
  1303. CHECKBUFFER: ds.b 8
  1304.  
  1305. PASS:
  1306.  ds.b 16
  1307.  
  1308. **************************************************
  1309.  
  1310. CHANGECONTROLS:
  1311.  
  1312.  move.w #6,OptScrn
  1313.  bsr DRAWOPTSCRN
  1314.  move.w #0,OPTNUM
  1315.  bsr HIGHLIGHT
  1316.  bsr WAITREL
  1317.  
  1318. .rdlop:
  1319.  bsr CHECKMENU
  1320.  tst.w d0
  1321.  blt.s .rdlop
  1322.  
  1323.  cmp.w #12,d0
  1324.  beq .backtomain
  1325.  
  1326.  move.l #KEY_LINES,a0
  1327.  move.w d0,d1
  1328.  muls #40,d1
  1329.  add.l d1,a0
  1330.  add.w #32,a0
  1331.  move.l #$20202020,(a0)
  1332.  movem.l d0/a0,-(a7)
  1333.  bsr JUSTDRAWIT
  1334.  movem.l (a7)+,d0/a0 
  1335.  
  1336.  clr.b lastpressed
  1337.  
  1338. .wtkey
  1339.  tst.b lastpressed
  1340.  beq .wtkey
  1341.  
  1342.  move.l #CONTROLBUFFER,a1
  1343.  moveq #0,d1
  1344.  move.b lastpressed,d1
  1345.  move.b d1,(a1,d0.w)
  1346.  move.l #KVALTOASC,a1
  1347.  move.l (a1,d1.w*4),(a0)
  1348.  bsr JUSTDRAWIT
  1349.  bsr WAITREL
  1350.  bra .rdlop
  1351.  
  1352. .backtomain:
  1353.  rts
  1354.  
  1355. **************************************************
  1356.  
  1357.  
  1358. MAXLEVEL: dc.w 0
  1359.  
  1360. SHOWCREDITS:
  1361.  move.w #2,OptScrn
  1362.  bsr DRAWOPTSCRN
  1363.  move.w #0,OPTNUM
  1364.  bsr HIGHLIGHT
  1365.  
  1366.  bsr WAITREL
  1367.  
  1368. .rdlop:
  1369.  bsr CHECKMENU
  1370.  tst.w d0
  1371.  blt.s .rdlop
  1372.  
  1373.  bra READMAINMENU
  1374.  
  1375. HELDDOWN:
  1376.  dc.w 0
  1377.  
  1378. WAITREL:
  1379.  
  1380.  movem.l d0/d1/d2/d3,-(a7)
  1381.  
  1382.  move.l #KeyMap,a5
  1383. WAITREL2:
  1384.  btst #7,$bfe001
  1385.  beq.s WAITREL2
  1386.  
  1387.  IFEQ CD32VER
  1388.  tst.b $40(a5)
  1389.  bne.s WAITREL2
  1390.  tst.b $44(a5)
  1391.  bne.s WAITREL2
  1392.  tst.b $4c(a5)
  1393.  bne.s WAITREL2
  1394.  tst.b $4d(a5)
  1395.  bne.s WAITREL2
  1396.  ENDC
  1397.  
  1398.  btst #1,$dff00c
  1399.  sne d0
  1400.  btst #1,$dff00d
  1401.  sne d1
  1402.  btst #0,$dff00c
  1403.  sne d2
  1404.  btst #0,$dff00d
  1405.  sne d3
  1406.  
  1407.  eor.b d0,d2
  1408.  eor.b d1,d3
  1409.  tst.b d2
  1410.  bne.s WAITREL2
  1411.  tst.b d3
  1412.  bne.s WAITREL2
  1413.  
  1414.  
  1415.  movem.l (a7)+,d0/d1/d2/d3
  1416.  rts
  1417.  
  1418. PUTINLINE:
  1419.  moveq #39,d0
  1420. pill
  1421.  move.b (a0)+,(a1)+
  1422.  dbra d0,pill
  1423.  rts
  1424.  
  1425. CHECKMENU:
  1426.  btst #1,$dff00c
  1427.  sne d0
  1428.  btst #1,$dff00d
  1429.  sne d1
  1430.  btst #0,$dff00c
  1431.  sne d2
  1432.  btst #0,$dff00d
  1433.  sne d3
  1434.  
  1435.  eor.b d0,d2
  1436.  eor.b d1,d3
  1437.  
  1438.  move.l #KeyMap,a5
  1439.  move.b $4c(a5),d0
  1440.  move.b $4d(a5),d1
  1441.  or.b d1,d3
  1442.  or.b d0,d2
  1443.  
  1444.  move.w OptScrn,d0
  1445.  move.l #MENUDATA,a0
  1446.  move.l 4(a0,d0.w*8),a0    ; opt data
  1447.  
  1448.  move.w OPTNUM,d0
  1449.  
  1450.  tst.b d2
  1451.  beq.s NOPREV
  1452.  
  1453.  
  1454.  sub.w #1,d0
  1455.  bge.s NOPREV
  1456.  
  1457.  move.w #0,d0 
  1458.  
  1459. NOPREV:
  1460.  
  1461.  tst.b d3
  1462.  beq.s NONEXT
  1463.  
  1464.  bsr WAITREL
  1465.  
  1466.  add.w #1,d0
  1467.  tst.w (a0,d0.w*8)
  1468.  bge.s NONEXT
  1469.  
  1470.  subq #1,d0
  1471.  
  1472. NONEXT:
  1473.  
  1474.  cmp.w OPTNUM,d0
  1475.  beq.s .nochange
  1476.  
  1477.  bsr HIGHLIGHT
  1478.  move.w d0,OPTNUM
  1479.  bsr HIGHLIGHT
  1480.  bsr WAITREL
  1481.  
  1482. .nochange:
  1483.  
  1484.  move.w #-1,d0
  1485.  
  1486.  btst #7,$bfe001
  1487.  beq.s select
  1488.  move.b $40(a5),d1
  1489.  or.b $44(a5),d1
  1490.  tst.b d1
  1491.  beq.s noselect
  1492.  
  1493. select:
  1494.  bsr WAITREL
  1495.  move.w OPTNUM,d0
  1496. noselect:
  1497.  
  1498.  rts
  1499.  
  1500. HIGHLIGHT:
  1501.  
  1502.  SAVEREGS
  1503.  
  1504.  move.w OptScrn,d0
  1505.  move.l #MENUDATA,a0
  1506.  move.l 4(a0,d0.w*8),a0
  1507.  move.w OPTNUM,d0
  1508.  lea (a0,d0.w*8),a0
  1509.  move.w (a0)+,d0    ;left
  1510.  move.w (a0)+,d1    ;top
  1511.  move.w (a0)+,d2    ;width
  1512.  
  1513.  muls #16*8,d1
  1514.  move.l OPTSPRADDR,a1
  1515.  add.w d1,a1
  1516.  add.w #8+16,a1
  1517.  move.l #SCRTOSPR2,a5
  1518.  adda.w d0,a5
  1519.  adda.w d0,a5
  1520.  
  1521. NOTLOP:
  1522.  
  1523.  move.w (a5)+,d3
  1524.  lea (a1,d3.w),a2
  1525.  not.b (a2)
  1526.  not.b 16(a2)
  1527.  not.b 32(a2)
  1528.  not.b 48(a2)
  1529.  not.b 64(a2)
  1530.  not.b 80(a2)
  1531.  not.b 96(a2)
  1532.  not.b 112(a2)
  1533.  not.b 128(a2)
  1534.  subq #1,d2
  1535.  bgt.s NOTLOP
  1536.  
  1537.  GETREGS
  1538.  rts
  1539.  
  1540. SCRTOSPR2:
  1541. val SET 0
  1542.  REPT 6
  1543.  dc.w val+0
  1544.  dc.w val+1
  1545.  dc.w val+2
  1546.  dc.w val+3
  1547.  dc.w val+4
  1548.  dc.w val+5
  1549.  dc.w val+6
  1550.  dc.w val+7
  1551. val SET val+258*16
  1552.  ENDR
  1553.  
  1554. CLROPTSCRN:
  1555.  
  1556.  move.l #$2cdfea,d0
  1557.  move.w (a4,d0.l),d0
  1558.  add.w d0,RVAL2
  1559.  
  1560.  move.l OPTSPRADDR,a0
  1561.  lea 16(a0),a1
  1562.  lea 16+(258*16)(a0),a2
  1563.  lea 16+(258*16*2)(a0),a3
  1564.  lea 16+(258*16*3)(a0),a4
  1565.  lea 258*16(a4),a0
  1566.  
  1567.  move.w #256,d0
  1568.  moveq #0,d1
  1569. CLRLOP:
  1570.  move.l d1,(a0)+
  1571.  move.l d1,(a0)+
  1572.  move.l d1,(a0)+
  1573.  move.l d1,(a0)+
  1574.  move.l d1,(a1)+
  1575.  move.l d1,(a1)+
  1576.  move.l d1,(a1)+
  1577.  move.l d1,(a1)+
  1578.  move.l d1,(a2)+
  1579.  move.l d1,(a2)+
  1580.  move.l d1,(a2)+
  1581.  move.l d1,(a2)+
  1582.  move.l d1,(a3)+
  1583.  move.l d1,(a3)+
  1584.  move.l d1,(a3)+
  1585.  move.l d1,(a3)+
  1586.  move.l d1,(a4)+
  1587.  move.l d1,(a4)+
  1588.  move.l d1,(a4)+
  1589.  move.l d1,(a4)+
  1590.  dbra d0,CLRLOP
  1591.  
  1592.  move.l OPTSPRADDR,a0
  1593.  move.w #44*256+64,(a0)
  1594.  move.w #44*256+2,8(a0)
  1595.  add.l #258*16,a0
  1596.  
  1597.  move.w #44*256+96,(a0)
  1598.  move.w #44*256+2,8(a0)
  1599.  add.l #258*16,a0
  1600.  
  1601.  move.w #44*256+128,(a0)
  1602.  move.w #44*256+2,8(a0)
  1603.  add.l #258*16,a0
  1604.  
  1605.  move.w #44*256+160,(a0)
  1606.  move.w #44*256+2,8(a0)
  1607.  add.l #258*16,a0
  1608.  
  1609.  move.w #44*256+192,(a0)
  1610.  move.w #44*256+2,8(a0)
  1611.  
  1612.  rts
  1613.  
  1614. DRAWOPTSCRN:
  1615.  
  1616.  bsr CLROPTSCRN
  1617.  
  1618. JUSTDRAWIT:
  1619.  
  1620.  move.l #font,a0
  1621.  move.l #MENUDATA,a1
  1622.  move.w OptScrn,d0
  1623.  move.l (a1,d0.w*8),a1
  1624.  
  1625.  move.l OPTSPRADDR,a3
  1626.  add.l #16,a3
  1627.  moveq #0,d2
  1628.  
  1629.  move.w #31,d0
  1630. linelop:
  1631.  move.w #39,d1
  1632.  move.l #SCRTOSPR,a4
  1633.  move.l a3,a2
  1634. charlop:
  1635.  move.b (a1)+,d2
  1636.  lea (a0,d2.w*8),a5
  1637.  move.b (a5)+,(a2)
  1638.  move.b (a5)+,16(a2)
  1639.  move.b (a5)+,32(a2)
  1640.  move.b (a5)+,48(a2)
  1641.  move.b (a5)+,64(a2)
  1642.  move.b (a5)+,80(a2)
  1643.  move.b (a5)+,96(a2)
  1644.  move.b (a5),112(a2)
  1645.  add.w (a4)+,a2
  1646.  dbra d1,charlop
  1647.  add.w #16*8,a3
  1648.  dbra d0,linelop
  1649.  
  1650.  rts
  1651.   
  1652. SCRTOSPR:
  1653.  dc.w 1,1,1,1,1,1,1,258*16-7
  1654.  dc.w 1,1,1,1,1,1,1,258*16-7
  1655.  dc.w 1,1,1,1,1,1,1,258*16-7
  1656.  dc.w 1,1,1,1,1,1,1,258*16-7
  1657.  dc.w 1,1,1,1,1,1,1,258*16-7
  1658.  dc.w 1,1,1,1,1,1,1,258*16-7
  1659.   
  1660. OPTNUM: dc.w 0
  1661. OptScrn: dc.w 0
  1662.  
  1663. MENUDATA:
  1664. ;0
  1665.  dc.l ONEPLAYERMENU_TXT
  1666.  dc.l ONEPLAYERMENU_OPTS
  1667. ;1
  1668.  dc.l INSTRUCTIONS_TXT
  1669.  dc.l INSTRUCTIONS_OPTS
  1670. ;2
  1671.  dc.l CREDITMENU_TXT
  1672.  dc.l CREDITMENU_OPTS
  1673. ;3
  1674.  dc.l ASKFORDISK_TXT
  1675.  dc.l ASKFORDISK_OPTS
  1676. ;4
  1677. ; dc.l ONEPLAYERMENU_TXT
  1678. ; dc.l ONEPLAYERMENU_OPTS
  1679.  dc.l MASTERPLAYERMENU_TXT
  1680.  dc.l MASTERPLAYERMENU_OPTS
  1681. ;5
  1682.  dc.l SLAVEPLAYERMENU_TXT
  1683.  dc.l SLAVEPLAYERMENU_OPTS
  1684. ;6
  1685.  dc.l CONTROL_TXT
  1686.  dc.l CONTROL_OPTS
  1687. ;7
  1688.  dc.l PROTMENU_TXT
  1689.  dc.l CONTROL_OPTS
  1690.  
  1691. ASKFORDISK_TXT:
  1692. ;      0123456789012345678901234567890123456789
  1693.  dc.b '                                        ' ;0
  1694.  dc.b '                                        ' ;1
  1695.  dc.b '                                        ' ;2
  1696.  dc.b '                                        ' ;3
  1697.  dc.b '                                        ' ;4
  1698.  dc.b '                                        ' ;5
  1699.  dc.b '                                        ' ;6
  1700.  dc.b '                                        ' ;7
  1701.  dc.b '                                        ' ;8
  1702.  dc.b '                                        ' ;9
  1703.  dc.b '                                        ' ;0
  1704.  dc.b '                                        ' ;1
  1705.  dc.b '                                        ' ;2
  1706.  dc.b '          INSERT LEVEL DISK             ' ;3
  1707.  dc.b '                                        ' ;4
  1708.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1709.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1710.  dc.b '               FINISHES                 ' ;7
  1711.  dc.b '                                        ' ;8
  1712.  dc.b '                                        ' ;9
  1713.  dc.b '                                        ' ;0
  1714.  dc.b '                                        ' ;1
  1715.  dc.b '                                        ' ;2
  1716.  dc.b '                                        ' ;3
  1717.  dc.b '                                        ' ;4
  1718.  dc.b '                                        ' ;5
  1719.  dc.b '                                        ' ;6
  1720.  dc.b '                                        ' ;7
  1721.  dc.b '                                        ' ;8
  1722.  dc.b '                                        ' ;9
  1723.  dc.b '                                        ' ;0
  1724.  dc.b '                                        ' ;1
  1725.  
  1726. ASKFORDISK_OPTS:
  1727.  dc.w -1
  1728.  
  1729.  
  1730. ONEPLAYERMENU_TXT:
  1731. ;      0123456789012345678901234567890123456789
  1732.  dc.b '                                        ' ;0
  1733.  dc.b '                                        ' ;1
  1734.  dc.b '                                        ' ;2
  1735.  dc.b '                                        ' ;3
  1736.  dc.b '                                        ' ;4
  1737.  dc.b '                                        ' ;5
  1738.  dc.b '                                        ' ;6
  1739.  dc.b '                                        ' ;7
  1740.  dc.b '                                        ' ;8
  1741.  dc.b '                                        ' ;9
  1742.  dc.b '                                        ' ;0
  1743. CURRENTLEVELLINE:
  1744.  dc.b '         *** A.F DEMO LEVEL ***         ' ;1 
  1745.  dc.b '                                        ' ;2
  1746.  dc.b '                1 PLAYER                ' ;3
  1747.  dc.b '                                        ' ;4
  1748.  dc.b '               PLAY  GAME               ' ;5
  1749.  dc.b '                                        ' ;6
  1750.  dc.b '            CONTROL  OPTIONS            ' ;7
  1751.  dc.b '                                        ' ;8
  1752.  dc.b '              GAME CREDITS              ' ;9
  1753.  dc.b '                                        ' ;0
  1754.  dc.b '                PASSWORD                ' ;1
  1755.  dc.b '                                        ' ;2
  1756. PASSWORDLINE:
  1757.  dc.b '                                        ' ;3
  1758.  dc.b '                                        ' ;4
  1759.  dc.b '                  QUIT                  ' ;5
  1760.  dc.b '                                        ' ;6
  1761.  dc.b '                                        ' ;7
  1762.  dc.b '                                        ' ;8
  1763.  dc.b '                                        ' ;9
  1764.  dc.b '                                        ' ;0
  1765.  dc.b '                                        ' ;1
  1766.  
  1767. ONEPLAYERMENU_OPTS:
  1768.  dc.w 16,13,8,1
  1769.  dc.w 15,15,10,1
  1770.  dc.w 12,17,16,1
  1771.  dc.w 14,19,12,1
  1772.  dc.w 12,23,16,1
  1773.  dc.w 18,25,4,1
  1774.  dc.w -1
  1775.  
  1776.  
  1777. MASTERPLAYERMENU_TXT:
  1778. ;      0123456789012345678901234567890123456789
  1779.  dc.b '                                        ' ;0
  1780.  dc.b '                                        ' ;1
  1781.  dc.b '                                        ' ;2
  1782.  dc.b '                                        ' ;3
  1783.  dc.b '                                        ' ;4
  1784.  dc.b '                                        ' ;5
  1785.  dc.b '                                        ' ;6
  1786.  dc.b '                                        ' ;7
  1787.  dc.b '                                        ' ;8
  1788.  dc.b '                                        ' ;9
  1789.  dc.b '                                        ' ;0
  1790.  dc.b '                                        ' ;1
  1791.  dc.b '            2 PLAYER  MASTER            ' ;2
  1792.  dc.b '                                        ' ;3
  1793. CURRENTLEVELLINEM:
  1794.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1795.  dc.b '                                        ' ;5
  1796.  dc.b '               PLAY  GAME               ' ;6
  1797.  dc.b '                                        ' ;7
  1798.  dc.b '            CONTROL  OPTIONS            ' ;8
  1799.  dc.b '                                        ' ;9
  1800.  dc.b '                                        ' ;0
  1801.  dc.b '                                        ' ;1
  1802.  dc.b '                                        ' ;2
  1803.  dc.b '                                        ' ;3
  1804.  dc.b '                                        ' ;4
  1805.  dc.b '                                        ' ;5
  1806.  dc.b '                                        ' ;6
  1807.  dc.b '                                        ' ;7
  1808.  dc.b '                                        ' ;8
  1809.  dc.b '                                        ' ;9
  1810.  dc.b '                                        ' ;0
  1811.  dc.b '                                        ' ;1
  1812.  
  1813. MASTERPLAYERMENU_OPTS:
  1814.  dc.w 12,12,16,1
  1815.  dc.w 6,14,28,1
  1816.  dc.w 15,16,10,1
  1817.  dc.w 12,18,16,1
  1818.  dc.w -1
  1819.  
  1820. SLAVEPLAYERMENU_TXT:
  1821. ;      0123456789012345678901234567890123456789
  1822.  dc.b '                                        ' ;0
  1823.  dc.b '                                        ' ;1
  1824.  dc.b '                                        ' ;2
  1825.  dc.b '                                        ' ;3
  1826.  dc.b '                                        ' ;4
  1827.  dc.b '                                        ' ;5
  1828.  dc.b '                                        ' ;6
  1829.  dc.b '                                        ' ;7
  1830.  dc.b '                                        ' ;8
  1831.  dc.b '                                        ' ;9
  1832.  dc.b '                                        ' ;9
  1833.  dc.b '                                        ' ;1
  1834.  dc.b '             2 PLAYER SLAVE             ' ;4
  1835.  dc.b '                                        ' ;3
  1836.  dc.b '               PLAY  GAME               ' ;2
  1837.  dc.b '                                        ' ;5
  1838.  dc.b '            CONTROL  OPTIONS            ' ;0
  1839.  dc.b '                                        ' ;1
  1840.  dc.b '                                        ' ;3
  1841.  dc.b '                                        ' ;7
  1842.  dc.b '                                        ' ;7
  1843.  dc.b '                                        ' ;3
  1844.  dc.b '                                        ' ;3
  1845.  dc.b '                                        ' ;3
  1846.  dc.b '                                        ' ;4
  1847.  dc.b '                                        ' ;5
  1848.  dc.b '                                        ' ;6
  1849.  dc.b '                                        ' ;7
  1850.  dc.b '                                        ' ;9
  1851.  dc.b '                                        ' ;9
  1852.  dc.b '                                        ' ;9
  1853.  dc.b '                                        ' ;9
  1854.  
  1855.  
  1856. PROTMENU_TXT:
  1857. ;      0123456789012345678901234567890123456789
  1858.  dc.b '                                        ' ;0
  1859.  dc.b '                                        ' ;1
  1860.  dc.b '                                        ' ;2
  1861.  dc.b '                                        ' ;3
  1862.  dc.b '                                        ' ;4
  1863.  dc.b '                                        ' ;5
  1864.  dc.b '                                        ' ;6
  1865.  dc.b '                                        ' ;7
  1866.  dc.b '                                        ' ;8
  1867.  dc.b '                                        ' ;9
  1868.  dc.b '                                        ' ;0
  1869.  dc.b '                                        ' ;1
  1870.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1871.  dc.b '                                        ' ;3
  1872. PROTLINE:
  1873.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1874.  dc.b '                                        ' ;5
  1875.  dc.b '                                        ' ;6
  1876.  dc.b '                                        ' ;7
  1877.  dc.b '                                        ' ;8
  1878.  dc.b '                                        ' ;9
  1879.  dc.b '                                        ' ;0
  1880.  dc.b '                                        ' ;1
  1881.  dc.b '                                        ' ;2
  1882.  dc.b '                                        ' ;3
  1883.  dc.b '                                        ' ;4
  1884.  dc.b '                                        ' ;5
  1885.  dc.b '                                        ' ;6
  1886.  dc.b '                                        ' ;7
  1887.  dc.b '                                        ' ;9
  1888.  dc.b '                                        ' ;0
  1889.  dc.b '                                        ' ;1
  1890.  
  1891.  
  1892.  
  1893. SLAVEPLAYERMENU_OPTS:
  1894.  dc.w 12,12,16,1
  1895.  dc.w 15,14,10,1
  1896.  dc.w 12,16,16,1
  1897.  dc.w -1
  1898.  
  1899.  
  1900. PLAYER_OPTS:
  1901. ;      0123456789012345678901234567890123456789
  1902.  dc.b '                 1 PLAYER               '
  1903.  dc.b '             2  PLAYER MASTER           '
  1904.  dc.b '              2 PLAYER SLAVE            '
  1905.  
  1906. LEVEL_OPTS:
  1907. ;      0123456789012345678901234567890123456789
  1908.  dc.b '      LEVEL  1 :          THE GATE      '
  1909.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1910.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1911.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  1912.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1913.  dc.b '      LEVEL  6 :         THE MINES      '
  1914.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1915.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1916.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1917.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1918.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1919.  dc.b '      LEVEL 12 :           THE PIT      '
  1920.  dc.b '      LEVEL 13 :            STRATA      '
  1921.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1922.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  1923.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1924.  
  1925. CONTROL_TXT:
  1926. ;      0123456789012345678901234567890123456789
  1927.  dc.b '                                        ' ;0
  1928.  dc.b '                                        ' ;1
  1929.  dc.b '                                        ' ;2
  1930.  dc.b '                                        ' ;3
  1931.  dc.b '            DEFINE  CONTROLS            ' ;4
  1932.  dc.b '                                        ' ;5
  1933. KEY_LINES:
  1934.  dc.b '     TURN LEFT                  LCK     ' ;6
  1935.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1936.  dc.b '     FORWARDS                   UCK     ' ;8
  1937.  dc.b '     BACKWARDS                  DCK     ' ;9
  1938.  dc.b '     FIRE                       RAL     ' ;0
  1939.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1940.  dc.b '     RUN                        RSH     ' ;2
  1941.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1942.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1943.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1944.  dc.b '     DUCK                        D      ' ;6
  1945.  dc.b '     LOOK BEHIND                 L      ' ;7
  1946.  dc.b '                                        ' ;8
  1947.  dc.b '             OTHER CONTROLS             ' ;9
  1948.  dc.b '                                        ' ;0
  1949.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1950.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1951.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1952.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1953.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1954.  dc.b '                                        ' ;6
  1955.  dc.b '               MAIN  MENU               ' ;7
  1956.  dc.b '                                        ' ;8
  1957.  dc.b '                                        ' ;9
  1958.  dc.b '                                        ' ;0
  1959.  dc.b '                                        ' ;1
  1960.  
  1961. CONTROL_OPTS:
  1962.  dc.w 5,6,30,1
  1963.  dc.w 5,7,30,1
  1964.  dc.w 5,8,30,1
  1965.  dc.w 5,9,30,1
  1966.  dc.w 5,10,30,1
  1967.  dc.w 5,11,30,1
  1968.  dc.w 5,12,30,1
  1969.  dc.w 5,13,30,1
  1970.  dc.w 5,14,30,1
  1971.  dc.w 5,15,30,1
  1972.  dc.w 5,16,30,1
  1973.  dc.w 5,17,30,1
  1974.  dc.w 15,27,10,1
  1975.  dc.w -1
  1976.  
  1977. PLOPT: dc.w 0
  1978.  
  1979. INSTRUCTIONS_TXT:
  1980. ;      0123456789012345678901234567890123456789
  1981.  dc.b 'Main controls:                          ' ;1
  1982.  dc.b '                                        ' ;2
  1983.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1984.  dc.b '            Turn left / right           ' ;4
  1985.  dc.b '          Right Alt = Fire              ' ;5
  1986.  dc.b '        Right Shift = Run               ' ;6
  1987.  dc.b '                  > = Slide Left        ' ;7
  1988.  dc.b '                  ? = Slide Right       ' ;8
  1989.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1990.  dc.b '                  D = Duck              ' ;0
  1991.  dc.b '                  J = Joystick Control  ' ;1
  1992.  dc.b '                  K = Keyboard Control  ' ;2
  1993.  dc.b '                                        ' ;3
  1994.  dc.b '              1,2,3 = Select weapon     ' ;4
  1995.  dc.b '              ENTER = Toggle screen size' ;5
  1996.  dc.b '                ESC = Quit              ' ;6
  1997.  dc.b '                                        ' ;7
  1998.  dc.b '                                        ' ;8
  1999.  dc.b 'The one player game has no objective and' ;9
  2000.  dc.b 'the only way to finish is to die or quit' ;0
  2001.  dc.b '                                        ' ;1
  2002.  dc.b 'The two-player game is supposed to be a ' ;2
  2003.  dc.b 'fight to the death but will probably be ' ;3
  2004.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  2005.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  2006.  dc.b '                                        ' ;6
  2007.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  2008.  dc.b 'have glowing red walls and overhead     ' ;8
  2009.  dc.b 'lights. Useful for getting behind your  ' ;9
  2010.  dc.b ' opponent!                              ' ;0
  2011.  dc.b '  Just a taster of what is to come....  ' ;1
  2012.  dc.b '                                        ' ;0
  2013.  
  2014. INSTRUCTIONS_OPTS:
  2015.  dc.w 0,0,0,1
  2016.  dc.w -1
  2017.  
  2018. CREDITMENU_TXT:
  2019.  
  2020. ;      0123456789012345678901234567890123456789
  2021.  dc.b '    Programming, Game Code, Graphics    ' ;0
  2022.  dc.b '         Game Design and Manual         ' ;1
  2023.  dc.b '            Andrew Clitheroe            ' ;2
  2024.  dc.b '                                        ' ;3
  2025.  dc.b '             Alien Graphics             ' ;4
  2026.  dc.b '             Michael  Green             ' ;5
  2027.  dc.b '                                        ' ;6
  2028.  dc.b '           3D Object Designer           ' ;7
  2029.  dc.b '            Charles Blessing            ' ;8
  2030.  dc.b '                                        ' ;9
  2031.  dc.b '              Level Design              ' ;0
  2032.  dc.b 'Michael Green  Ben Chanter   Jackie Lang' ;1
  2033.  dc.b '     Kai Barrett Charles Blessing       ' ;2
  2034.  dc.b '                                        ' ;3
  2035.  dc.b '           Creative  Director           ' ;4
  2036.  dc.b '              Martyn Brown              ' ;5
  2037.  dc.b '                                        ' ;6
  2038.  dc.b '       Project Manager and Manual       ' ;7
  2039.  dc.b "            Martin O'Donnell            " ;8
  2040.  dc.b '                                        ' ;9
  2041.  dc.b '              Music + SFX               ' ;0
  2042.  dc.b '              Bjorn Lynne               ' ;1
  2043.  dc.b '                                        ' ;2
  2044.  dc.b '      Cover Illustration and Logo       ' ;3
  2045.  dc.b '             Kevin Jenkins              ' ;4
  2046.  dc.b '                                        ' ;5
  2047.  dc.b '      Packaging and Manual Design       ' ;6
  2048.  dc.b '               Paul Sharp               ' ;7
  2049.  dc.b '                                        ' ;8
  2050.  dc.b '             QA and Playtest            ' ;9
  2051.  dc.b '           Phil and The Wolves          ' ;0
  2052.  dc.b '                                        ' ;1
  2053.  
  2054.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  2055.  dc.b '                   by                   ' ;5
  2056.  dc.b '            Charles Blessing            ' ;6
  2057.  dc.b '                                        ' ;7
  2058.  dc.b '                Graphics:               ' ;8
  2059.  dc.b '                   by                   ' ;9
  2060.  dc.b '              Mike  Oakley              ' ;0
  2061.  dc.b '                                        ' ;1
  2062.  dc.b '             Title  Picture             ' ;2
  2063.  dc.b '                   by                   ' ;3
  2064.  dc.b '               Mike Green               ' ;4
  2065.  dc.b '                                        ' ;5
  2066.  dc.b ' Inspiration, incentive, moral support, ' ;6
  2067.  dc.b '     level design and plenty of tea     ' ;7
  2068.  dc.b '         generously supplied by         ' ;8
  2069.  dc.b '                                        ' ;9
  2070.  dc.b '              Jackie  Lang              ' ;0
  2071.  dc.b '                                        ' ;1
  2072.  dc.b '    Music for the last demo composed    ' ;2
  2073.  dc.b '       by the inexpressibly evil:       ' ;3
  2074.  dc.b '                                        ' ;8
  2075.  dc.b '            *BAD* BEN CHANTER           ' ;9
  2076.  dc.b '                                        ' ;0
  2077.  dc.b '    Sadly no room for music this time   ' ;1
  2078.  dc.b '                                        ' ;7
  2079.  dc.b '                                        ' ;7
  2080.  
  2081. CREDITMENU_OPTS:
  2082.  dc.w 0,0,1,1
  2083.  dc.w -1
  2084.  
  2085.  
  2086. ;      0123456789012345678901234567890123456789
  2087.  dc.b '                                        ' ;0
  2088.  dc.b '                                        ' ;1
  2089.  dc.b '                                        ' ;2
  2090.  dc.b '                                        ' ;3
  2091.  dc.b '                                        ' ;4
  2092.  dc.b '                                        ' ;5
  2093.  dc.b '                                        ' ;6
  2094.  dc.b '                                        ' ;7
  2095.  dc.b '                                        ' ;8
  2096.  dc.b '                                        ' ;9
  2097.  dc.b '                                        ' ;0
  2098.  dc.b '                                        ' ;1
  2099.  dc.b '                                        ' ;2
  2100.  dc.b '                                        ' ;3
  2101.  dc.b '                                        ' ;4
  2102.  dc.b '                                        ' ;5
  2103.  dc.b '                                        ' ;6
  2104.  dc.b '                                        ' ;7
  2105.  dc.b '                                        ' ;8
  2106.  dc.b '                                        ' ;9
  2107.  dc.b '                                        ' ;0
  2108.  dc.b '                                        ' ;1
  2109.  dc.b '                                        ' ;2
  2110.  dc.b '                                        ' ;3
  2111.  dc.b '                                        ' ;4
  2112.  dc.b '                                        ' ;5
  2113.  dc.b '                                        ' ;6
  2114.  dc.b '                                        ' ;7
  2115.  dc.b '                                        ' ;8
  2116.  dc.b '                                        ' ;9
  2117.  dc.b '                                        ' ;0
  2118.  dc.b '                                        ' ;1
  2119.  
  2120.  
  2121. ********************************************************
  2122.  
  2123. PUTIN32:
  2124.  move.w #31,d2
  2125. p32loop:
  2126.  moveq #0,d5
  2127.  move.l (a0)+,d3
  2128.  move.w d3,d4
  2129.  swap d3
  2130.  move.b d4,d5
  2131.  lsr.w #8,d4
  2132.  
  2133.  muls d0,d3
  2134.  muls d0,d4
  2135.  muls d0,d5
  2136.  lsr.l #8,d3
  2137.  lsr.l #8,d4
  2138.  lsr.l #8,d5
  2139.  move.w d3,d6
  2140.  swap d3
  2141.  move.w d6,d3
  2142.  move.w d4,d6
  2143.  swap d4
  2144.  move.w d6,d4
  2145.  move.w d5,d6
  2146.  swap d5
  2147.  move.w d6,d5
  2148.  and.w #%11110000,d3
  2149.  and.w #%11110000,d4
  2150.  and.w #%11110000,d5
  2151.  lsl.w #4,d3
  2152.  add.w d4,d3
  2153.  lsr.w #4,d5
  2154.  add.w d5,d3
  2155.  move.w d3,2(a1)
  2156.  swap d3
  2157.  swap d4
  2158.  swap d5
  2159.  and.w #%1111,d3
  2160.  and.w #%1111,d4
  2161.  and.w #%1111,d5
  2162.  lsl.w #8,d3
  2163.  lsl.w #4,d4
  2164.  add.w d4,d3
  2165.  add.w d5,d3
  2166.  move.w d3,2+(132*4)(a1)
  2167.  addq #4,a1
  2168.  dbra d2,p32loop
  2169.  
  2170.  
  2171.  rts
  2172.  
  2173. **************************************
  2174.  
  2175. FADEAMOUNT: dc.w 0
  2176. FADEVAL: dc.w 0
  2177.  
  2178. FADEUPTITLE:
  2179.  
  2180.  move.w FADEVAL,d0
  2181.  move.w FADEAMOUNT,d1
  2182. fadeuploop:
  2183.  
  2184.  move.l #TITLEPAL,a0
  2185.  move.l #TITLEPALCOP,a1
  2186.  
  2187. wvb:
  2188.  btst #5,$dff000+intreqrl
  2189.  beq.s wvb
  2190.  move.w #$20,$dff000+intreq 
  2191.  
  2192.  bsr PUTIN32
  2193.  add.w #4,a1
  2194.  bsr PUTIN32
  2195.  add.w #4,a1
  2196.  bsr PUTIN32
  2197.  add.w #4,a1
  2198.  bsr PUTIN32
  2199.  
  2200.  addq.w #4,d0
  2201.  dbra d1,fadeuploop
  2202.  
  2203.  subq #4,d0
  2204.  move.w d0,FADEVAL
  2205.  
  2206.  rts
  2207.  
  2208. CLEARTITLEPAL:
  2209.  PRSDP
  2210.  move.l #TITLEPALCOP,a0
  2211.  move.w #7,d1
  2212. clrpal:
  2213.  move.w #31,d0
  2214. clr32
  2215.  move.w #0,2(a0)
  2216.  addq #4,a0
  2217.  dbra d0,clr32
  2218.  addq #4,a0
  2219.  dbra d1,clrpal
  2220.  PRSDQ
  2221.  rts
  2222.  
  2223. FADEDOWNTITLE:
  2224.  
  2225.  move.w FADEVAL,d0
  2226.  move.w FADEAMOUNT,d1
  2227. fadedownloop:
  2228.  
  2229.  move.l #TITLEPAL,a0
  2230.  move.l #TITLEPALCOP,a1
  2231.  
  2232. .wvb:
  2233.  btst #5,$dff000+intreqrl
  2234.  beq.s .wvb
  2235.  move.w #$20,$dff000+intreq 
  2236.  
  2237.  bsr PUTIN32
  2238.  add.w #4,a1
  2239.  bsr PUTIN32
  2240.  add.w #4,a1
  2241.  bsr PUTIN32
  2242.  add.w #4,a1
  2243.  bsr PUTIN32
  2244.  
  2245.  subq.w #4,d0
  2246.  dbra d1,fadedownloop
  2247.  
  2248.  addq #4,d0
  2249.  move.w d0,FADEVAL
  2250.  
  2251.  rts
  2252.  
  2253. LOADTITLESCRN2:
  2254.  
  2255.  
  2256.  move.l #MEMF_CLEAR,d1
  2257.  move.l #52400,d0
  2258.  move.l 4.w,a6
  2259.  jsr    _LVOAllocMem(a6)
  2260.  tst.l  d0
  2261.  beq    .nomem
  2262.  
  2263.  move.l d0,tempptr
  2264.  
  2265.  move.l #TITLESCRNNAME2,d1
  2266.  move.l #1005,d2
  2267.  move.l doslib,a6
  2268.  jsr -30(a6)
  2269.  move.l d0,handle
  2270.  move.l d0,d1
  2271.  move.l doslib,a6
  2272. ; move.l TITLESCRNADDR,d2
  2273.  move.l tempptr,d2
  2274.  move.l #10240*7,d3
  2275.  jsr -42(a6)
  2276.  move.l doslib,a6
  2277.  move.l handle,d1
  2278.  jsr -36(a6)
  2279.  
  2280.     
  2281.  move.l TITLESCRNADDR,a0
  2282.  move.l tempptr,d0
  2283.  
  2284.  moveq #0,d1
  2285.  lea WorkSpace,a1
  2286.  lea $0,a2
  2287.  jsr unLHA
  2288.  
  2289.   move.l tempptr,a1
  2290.  move.l #52400,d0
  2291.  CALLEXEC FreeMem
  2292.   
  2293. .nomem
  2294.  
  2295.  rts
  2296.  
  2297. tempptr dc.l 0
  2298.  
  2299.  
  2300. GETTITLEMEM:
  2301.  move.l #2,d1
  2302.  move.l #10240*7,d0
  2303.  move.l 4.w,a6
  2304.  jsr -198(a6)
  2305.  move.l d0,TITLESCRNADDR
  2306.  
  2307.  move.l #$dff000-$2cdfe4,a4
  2308.  
  2309.  move.l #2,d1
  2310.  move.l #258*16*5,d0
  2311.  move.l 4.w,a6
  2312.  jsr -198(a6)
  2313.  move.l d0,OPTSPRADDR
  2314.  
  2315.  rts
  2316.  
  2317. ProtChkJLev1:
  2318.  
  2319. PROTSETUP:
  2320.  incbin "ab3:includes/protsetupenc"
  2321.  
  2322. ; Need to: Decode protection calling
  2323. ; routine
  2324. ; use null values to call it and erase
  2325. ; it from memory
  2326. ; erase this routine and return.
  2327.  
  2328. ; include "ab3:source/protsetup"
  2329.  
  2330.  
  2331. RELEASETITLEMEM:
  2332.  move.l TITLESCRNADDR,d1
  2333.  move.l d1,a1
  2334.  move.l #10240*7,d0
  2335.  move.l 4.w,a6
  2336.  jsr -210(a6)
  2337.  
  2338.  move.l OPTSPRADDR,d1
  2339.  move.l d1,a1
  2340.  move.l #258*80,d0
  2341.  move.l 4.w,a6
  2342.  jsr -210(a6)
  2343.  rts
  2344.  
  2345.  
  2346. PROTCALLENC:
  2347. ; incbin "ab3:source/protcallenc.bin
  2348.  
  2349. ; one pass, all instructions executed.
  2350. ; must call protection routine,store
  2351. ; value somewhere, call ask routine,
  2352. ; compare returned value, if correct
  2353. ; set up all values, then return.
  2354.  
  2355.  include "ab3:source_cd32/protcallenc"
  2356.  
  2357. ENDPROT:
  2358.  
  2359. LOADTITLESCRN:
  2360.  
  2361.  move.l #TITLESCRNNAME,d1
  2362.  move.l #1005,d2
  2363.  move.l doslib,a6
  2364.  jsr -30(a6)
  2365.  move.l d0,handle
  2366.  move.l d0,d1
  2367.  move.l doslib,a6
  2368.  move.l TITLESCRNADDR,d2
  2369.  move.l #10240*7,d3
  2370.  jsr -42(a6)
  2371.  move.l doslib,a6
  2372.  move.l handle,d1
  2373.  jsr -36(a6)
  2374.  
  2375.  rts
  2376.  
  2377. RVAL2: dc.w 0
  2378.  
  2379. SETUPTITLESCRN:
  2380.  
  2381.  PRSDR
  2382.  move.l #OPTCOP,a0
  2383.  move.l #rain,a1
  2384.  move.w #255,d0
  2385. putinrain:
  2386.  move.w (a1)+,d1
  2387.  move.w d1,6(a0)
  2388.  move.w d1,6+4(a0)
  2389.  move.w d1,6+8(a0)
  2390.  move.w d1,6+12(a0)
  2391.  add.w #4*14,a0
  2392.  
  2393.  dbra d0,putinrain
  2394.  
  2395. ; Put addr into copper.
  2396.  move.l OPTSPRADDR,d0
  2397.  move.w d0,tsp0l
  2398.  swap d0
  2399.  move.w d0,tsp0h
  2400.  swap d0
  2401.  add.l #258*16,d0
  2402.  move.w d0,tsp1l
  2403.  swap d0
  2404.  move.w d0,tsp1h
  2405.  swap d0
  2406.  add.l #258*16,d0
  2407.  move.w d0,tsp2l
  2408.  swap d0
  2409.  move.w d0,tsp2h
  2410.  swap d0
  2411.  add.l #258*16,d0
  2412.  move.w d0,tsp3l
  2413.  swap d0
  2414.  move.w d0,tsp3h
  2415.  swap d0
  2416.  add.l #258*16,d0
  2417.  move.w d0,tsp4l
  2418.  swap d0
  2419.  move.w d0,tsp4h
  2420.  
  2421.  move.l #nullspr,d0
  2422.  move.w d0,tsp5l
  2423.  move.w d0,tsp6l
  2424.  move.w d0,tsp7l
  2425.  swap d0
  2426.  move.w d0,tsp5h
  2427.  move.w d0,tsp6h
  2428.  move.w d0,tsp7h 
  2429.  
  2430.  move.l TITLESCRNADDR,d0
  2431.  move.w d0,ts1l
  2432.  swap d0
  2433.  move.w d0,ts1h
  2434.  swap d0
  2435.  add.l #10240,d0
  2436.  move.w d0,ts2l
  2437.  swap d0
  2438.  move.w d0,ts2h
  2439.  swap d0
  2440.  add.l #10240,d0
  2441.  move.w d0,ts3l
  2442.  swap d0
  2443.  move.w d0,ts3h
  2444.  swap d0
  2445.  add.l #10240,d0
  2446.  move.w d0,ts4l
  2447.  swap d0
  2448.  move.w d0,ts4h
  2449.  swap d0
  2450.  add.l #10240,d0
  2451.  move.w d0,ts5l
  2452.  swap d0
  2453.  move.w d0,ts5h
  2454.  swap d0
  2455.  add.l #10240,d0
  2456.  move.w d0,ts6l
  2457.  swap d0
  2458.  move.w d0,ts6h
  2459.  swap d0
  2460.  add.l #10240,d0
  2461.  move.w d0,ts7l
  2462.  swap d0
  2463.  move.w d0,ts7h
  2464.  rts 
  2465.  
  2466. RVAL1: dc.w 0
  2467.  
  2468. DummyAdds:
  2469.  dc.l dummy-78935450
  2470.  dc.l dummy-78935450
  2471.  dc.l dummy-78935450
  2472.  dc.l dummy-78935450
  2473.  dc.l dummy-78935450
  2474.  dc.l dummy-78935450
  2475.  dc.l dummy-78935450
  2476.  dc.l dummy-78935450
  2477.  dc.l dummy-78935450
  2478.  dc.l dummy-78935450
  2479.  
  2480. dummycall
  2481.  dc.w $4e75-123
  2482.  
  2483. protspace: ds.l 200
  2484.  
  2485.  include "ab3:source_4000/LEVEL_BLURB"
  2486.  
  2487. font:
  2488.  incbin "OptFont"
  2489.  
  2490. rain: incbin "optcop"
  2491.